package design.patterns.structural;

/**
 * 装饰模式
 * 解释：
 * 装饰模式是一种结构型设计模式，
 * 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。
 */

/**
 * 情景
 * 新买的椅子，坐着不舒服， 座位上需要垫上垫子
 */
public class D_Decorator {
    public static void main(String[] args) {

        ChairProduct chairProduct = new ChairProduct();
        chairProduct.sit();

        System.out.println("===使用装饰器===");

        ChairProductDecorator chairProductDecorator = new ChairProductDecorator(chairProduct);
        chairProductDecorator.sit();
    }
}

interface Chair{
    void sit();
}
class ChairProduct implements Chair{

    @Override
    public void sit() {
        System.out.println("可以坐");
    }
}
class ChairProductDecorator implements Chair{
    private ChairProduct chairProduct;
    private String cushion;

    public ChairProductDecorator(ChairProduct chairProduct) {
        this.chairProduct = chairProduct;
    }

    public void sit(){
        chairProduct.sit();
        System.out.println("增加了柔软的垫子");
        this.cushion ="柔软的垫子";
    }

    @Override
    public String toString() {
        return "ChairProductDecorator{" +
                "cushion='" + cushion + '\'' +
                '}';
    }
}